<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Variant Comparison Files</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REV="MADE"
HREF="mailto:pgsql-docs@postgresql.org"><LINK
REL="HOME"
TITLE="PostgreSQL 9.1.2 Documentation"
HREF="index.html"><LINK
REL="UP"
TITLE="Regression Tests"
HREF="regress.html"><LINK
REL="PREVIOUS"
TITLE="Test Evaluation"
HREF="regress-evaluation.html"><LINK
REL="NEXT"
TITLE="Test Coverage Examination"
HREF="regress-coverage.html"><LINK
REL="STYLESHEET"
TYPE="text/css"
HREF="stylesheet.css"><META
HTTP-EQUIV="Content-Type"
CONTENT="text/html; charset=ISO-8859-1"><META
NAME="creation"
CONTENT="2011-12-01T22:07:59"></HEAD
><BODY
CLASS="SECT1"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="5"
ALIGN="center"
VALIGN="bottom"
><A
HREF="index.html"
>PostgreSQL 9.1.2 Documentation</A
></TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
TITLE="Test Evaluation"
HREF="regress-evaluation.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
HREF="regress.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="60%"
ALIGN="center"
VALIGN="bottom"
>Chapter 30. Regression Tests</TD
><TD
WIDTH="20%"
ALIGN="right"
VALIGN="top"
><A
TITLE="Test Coverage Examination"
HREF="regress-coverage.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="REGRESS-VARIANT"
>30.3. Variant Comparison Files</A
></H1
><P
>    Since some of the tests inherently produce environment-dependent
    results, we have provided ways to specify alternate <SPAN
CLASS="QUOTE"
>"expected"</SPAN
>
    result files.  Each regression test can have several comparison files
    showing possible results on different platforms.  There are two
    independent mechanisms for determining which comparison file is used
    for each test.
   </P
><P
>    The first mechanism allows comparison files to be selected for
    specific platforms.  There is a mapping file,
    <TT
CLASS="FILENAME"
>src/test/regress/resultmap</TT
>, that defines
    which comparison file to use for each platform.
    To eliminate bogus test <SPAN
CLASS="QUOTE"
>"failures"</SPAN
> for a particular platform,
    you first choose or make a variant result file, and then add a line to the
    <TT
CLASS="FILENAME"
>resultmap</TT
> file.
   </P
><P
>    Each line in the mapping file is of the form
</P><PRE
CLASS="SYNOPSIS"
>testname:output:platformpattern=comparisonfilename</PRE
><P>
    The test name is just the name of the particular regression test
    module. The output value indicates which output file to check. For the
    standard regression tests, this is always <TT
CLASS="LITERAL"
>out</TT
>. The
    value corresponds to the file extension of the output file.
    The platform pattern is a pattern in the style of the Unix
    tool <TT
CLASS="COMMAND"
>expr</TT
> (that is, a regular expression with an implicit
    <TT
CLASS="LITERAL"
>^</TT
> anchor at the start).  It is matched against the
    platform name as printed by <TT
CLASS="COMMAND"
>config.guess</TT
>.
    The comparison file name is the base name of the substitute result
    comparison file.
   </P
><P
>    For example: some systems interpret very small floating-point values
    as zero, rather than reporting an underflow error.  This causes a
    few differences in the <TT
CLASS="FILENAME"
>float8</TT
> regression test.
    Therefore, we provide a variant comparison file,
    <TT
CLASS="FILENAME"
>float8-small-is-zero.out</TT
>, which includes
    the results to be expected on these systems.  To silence the bogus
    <SPAN
CLASS="QUOTE"
>"failure"</SPAN
> message on <SPAN
CLASS="SYSTEMITEM"
>OpenBSD</SPAN
>
    platforms, <TT
CLASS="FILENAME"
>resultmap</TT
> includes:
</P><PRE
CLASS="PROGRAMLISTING"
>float8:out:i.86-.*-openbsd=float8-small-is-zero.out</PRE
><P>
    which will trigger on any machine where the output of
    <TT
CLASS="COMMAND"
>config.guess</TT
> matches <TT
CLASS="LITERAL"
>i.86-.*-openbsd</TT
>.
    Other lines
    in <TT
CLASS="FILENAME"
>resultmap</TT
> select the variant comparison file for other
    platforms where it's appropriate.
   </P
><P
>    The second selection mechanism for variant comparison files is
    much more automatic: it simply uses the <SPAN
CLASS="QUOTE"
>"best match"</SPAN
> among
    several supplied comparison files.  The regression test driver
    script considers both the standard comparison file for a test,
    <TT
CLASS="LITERAL"
><TT
CLASS="REPLACEABLE"
><I
>testname</I
></TT
>.out</TT
>, and variant files named
    <TT
CLASS="LITERAL"
><TT
CLASS="REPLACEABLE"
><I
>testname</I
></TT
>_<TT
CLASS="REPLACEABLE"
><I
>digit</I
></TT
>.out</TT
>
    (where the <TT
CLASS="REPLACEABLE"
><I
>digit</I
></TT
> is any single digit
    <TT
CLASS="LITERAL"
>0</TT
>-<TT
CLASS="LITERAL"
>9</TT
>).  If any such file is an exact match,
    the test is considered to pass; otherwise, the one that generates
    the shortest diff is used to create the failure report.  (If
    <TT
CLASS="FILENAME"
>resultmap</TT
> includes an entry for the particular
    test, then the base <TT
CLASS="REPLACEABLE"
><I
>testname</I
></TT
> is the substitute
    name given in <TT
CLASS="FILENAME"
>resultmap</TT
>.)
   </P
><P
>    For example, for the <TT
CLASS="LITERAL"
>char</TT
> test, the comparison file
    <TT
CLASS="FILENAME"
>char.out</TT
> contains results that are expected
    in the <TT
CLASS="LITERAL"
>C</TT
> and <TT
CLASS="LITERAL"
>POSIX</TT
> locales, while
    the file <TT
CLASS="FILENAME"
>char_1.out</TT
> contains results sorted as
    they appear in many other locales.
   </P
><P
>    The best-match mechanism was devised to cope with locale-dependent
    results, but it can be used in any situation where the test results
    cannot be predicted easily from the platform name alone.  A limitation of
    this mechanism is that the test driver cannot tell which variant is
    actually <SPAN
CLASS="QUOTE"
>"correct"</SPAN
> for the current environment; it will just pick
    the variant that seems to work best.  Therefore it is safest to use this
    mechanism only for variant results that you are willing to consider
    equally valid in all contexts.
   </P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="regress-evaluation.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="regress-coverage.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Test Evaluation</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="regress.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Test Coverage Examination</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>